#ifndef JEU_H
#   define JEU_H


#include "base_donnees.h"
#include "etat_partie.h"
#include "def_etat_bataille.h"
#include "def_etat_exploration.h"

#include "constantes_et_macros.h"





/**
 * \fn void jouer(struct base_donnees* donnees)
 * \brief Fonction permettant, une fois le jeu lance (demarrer_jeu), de jouer
 *
 * \param[in] donnees L'adresse d'une base_donnees correctement remplie
 */
void jouer(struct base_donnees* donnees);



/**
 * \fn void choisir_region(struct etat_partie* partie, struct base_donnees* donnees)
 * \brief Permet au joueur de choisir une region. L'etat partie est modifie
 *        en consequences.\n
 *        Si le joueur souhaite quitter le jeu,
 *        le numero de region sera mis a 0
 *
 * \param[in,out] partie L'adresse de la partie
 * \param[in] donnees Une base de donnees correctement remplie
 *
 * Rappel : le joueur n'a pas forcement acces a toutes les regions.
 * La base_donnees contient des dependances, qui indiquent quelles regions
 * doivent etre terminees pour avoir acces a une autre region. Ces dependances
 * permettent donc de determiner a quelles regions le joueur a acces.
 */
void choisir_region(struct etat_partie* partie, struct base_donnees* donnees);



/**
 * \fn void choisir_zone(struct etat_partie* partie,
                         const struct etat_exploration* exploration,
                         struct base_donnees* donnees)
 * \brief Permet au joueur de choisir une zone. L'etat partie est modifie
 *        en consequences.\n
 *        Si le joueur souhaite abandonner l'exploration,
 *        le numero de zone sera mis a 0
 *
 * \param[in,out] partie L'adresse de la partie
 * \param[in] exploration L'adresse de l'etat de l'exploration en cours
 * \param[in] donnees Une base de donnees correctement remplie
 *
 * Rappel : pour pouvoir acceder a une zone durant une exploration, il faut
 * avoir fini une zone qui y est reliee. Si on sort d'une region et que l'on y
 * retourne, il faut tout reprendre a zero. Toutefois, le joueur peut savoir
 * quelles zones ont ete terminees durant ses explorations precedentes.
 */
void choisir_zone(struct etat_partie* partie,
                  const struct etat_exploration* exploration,
                  struct base_donnees* donnees);



/**
 * \fn char voir_bilan_bataille(const struct etat_bataille* bataille)
 * \brief Permet de savoir si une bataille est terminee, et, si oui,
 *        qui en est le vainqueur
 *
 * \param[in] bataille L'adresse de l'etat_bataille a examiner
 * \return VICTOIRE si le joueur a gagne,\n
 *         DEFAITE si il a perdu,\n
 *         PAS_TERMINEE si personne n'a encore gagne
 */
char voir_bilan_bataille(const struct etat_bataille* bataille);


#endif /* JEU_H */
